/*
 * Basado en el libro de Duane A. Bailey, "Java Structures", pág. 180 y la hoja de trabajo 4
 */
package Hoja6;

import java.util.Iterator;

/**
 *
 * @param <E> 
 * @author María Fernanda Martínez
 */
public interface List<E> {
    /**
     * Nombre: size
     * Descripcion: obtiene la cantidad de elementos presentes en la lista
     * Pre: ninguno
     * Post: regresa la cantidad de elementos en la lista
     * Parametros: ninguno
     * @return valor tipo int
     */
    public int size();
    
    /**
     * Nombre: isEmpty
     * Descripcion: verifica si la lista esta vacia
     * Pre: ninguno
     * Post: regresa true si la lista esta vacia
     * Parametros: ninguno
     * @return valor tipo boolean
     */
    public boolean isEmpty();

    /**
     * Nombre: clear
     * Descripcion: borra todos los elementos de la lista
     * Pre: ninguno
     * Post: lista vacia
     * Parametros: ninguno
     * Valor de retorno: ninguno
     */
    public void clear();
    // post: empties list
    
    /**
     * Nombre: addFirst
     * Descripcion: agrega un objeto al inicio de la lista
     * Pre: espacio disponible
     * Post: valor agregado a la lista
     * @param value de tipo E
     * Valor de retorno: ninguno
     */
    public void addFirst(E value);
    
    /**
     * Nombre: getFirst
     * Descripcion: obtiene el ultimo valor que se inserto en la lista
     * Pre: hay valor en la lista
     * Post: muestra valor al inicio de la lista
     * Parametros: ninguno
     * @return valor tipo E
     */
    public E getFirst();

    /**
     * Nombre: removeFirst
     * Descripcion: el objeto que entro de ultimo a la lista es retirado de ella
     * Pre: hay valor en la lista
     * Post: valor removido de la lista
     * Parametros: ninguno
     * @return valor tipo E
     */
    public E removeFirst();
    
    /**
     * Nombre: removeLast
     * Descripción: retira el último elemento de la lista
     * Pre: lista no está vacía
     * Post: último elemento de la lista retirado
     * No hay parámetros
     * @return
     */
    public E removeLast();
    
    /**
     * Nombre: remove
     * Descripción: remover un elemento con valor value
     * Pre: value no es null
     * Post: elemento con valor value removido, si no existe regresa null
     * @param value
     * @return
     */
    public E remove(E value);
   
    /**
     * Nombre: iterator
     * Descripción: iterador de List
     * Pre: no hay
     * Post: regresa un iterador que permite viajar a traves de una lista
     * No tiene parámetros
     * @return
     */
    public Iterator<E> iterator();
}
